package Blog1;
// 泛型

import java.util.Arrays;

// 创建一个泛型类
class MyArrayList<T>{
    public T[] elem;  // 创建一个泛型数组
    public int usedSize;

    public MyArrayList() {    // 构造方法
//        this.elem = new new[10];  // 泛型不可实例化
        this.elem = (T[])new Object[10];  // Object父类数组 通过强转置为 泛型数组

    }

    public void add(T val) {  // 泛型参数
        this.elem[this.usedSize] = val;
        this.usedSize++;
    }

    public T[] getElem() {
        return elem;
    }
    public T getVal(int n) {  // 根据下标返回对应数组的下标值
        return elem[n];
    }
}

public class Blog16 {
    public static void main(String[] args) {
//        MyArrayList<int> myArrayList = new MyArrayList<>();
//        基本数据类型不可以作为泛型的参数使用，需要使用对应的包装类才行
        MyArrayList<Integer> myArrayList = new MyArrayList<Integer>();  // 等号右边的参数可以省略不写的
        myArrayList.add(1);
//        myArrayList.add("hello");   泛型会自动检查类型的一致性
        myArrayList.add(2);
        myArrayList.add(3);
        System.out.println(myArrayList.getVal(1));  // 取对应下标的值
        System.out.println(Arrays.toString(myArrayList.getElem()));  // 打印泛型数组
    }

}
